package com.btkjgc.utils;

import javax.mail.Message;
import javax.mail.Transport;
import javax.mail.Session;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.net.UnknownHostException;
import java.util.Properties;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Created by wu on 2015/9/7.
 */

public class SendEmail
{

	// 测试用函数
	public static void main(String[] args) throws Exception
	{
		System.out.println("" + System.currentTimeMillis());
		// Properties prop = new Properties();
		// prop.setProperty("mail.host", "smtp.sohu.com");
		// prop.setProperty("mail.transport.protocol", "smtp");
		// prop.setProperty("mail.smtp.auth", "true");
		// //使用JavaMail发送邮件的5个步骤
		// //1、创建session
		// Session session = Session.getInstance(prop);
		// //开启Session的debug模式，这样就可以查看到程序发送Email的运行状态
		// session.setDebug(true);
		// //2、通过session得到transport对象
		// Transport ts = session.getTransport();
		// //3、使用邮箱的用户名和密码连上邮件服务器，发送邮件时，发件人需要提交邮箱的用户名和密码给smtp服务器，用户名和密码都通过验证之后才能够正常发送邮件给收件人。
		// ts.connect(Constant.PW_RETRIEVE_SEND_SMTP,
		// Constant.PW_RETRIEVE_SEND_EMIAL, Constant.PW_RETRIEVE_PW);
		// //4、创建邮件
		// Message message = createSimpleMail(session,
		// Constant.PW_RETRIEVE_SEND_EMIAL, "admin", (new
		// Date()).toString().hashCode());
		// //5、发送邮件
		// ts.sendMessage(message, message.getAllRecipients());
		// ts.close();
	}

	public static void pwRetrieveByEmail(String recipient, String username,
			String retriveTime) throws Exception
	{
		Properties prop = new Properties();
		prop.setProperty("mail.host", "smtp.sohu.com");
		prop.setProperty("mail.transport.protocol", "smtp");
		prop.setProperty("mail.smtp.auth", "true");
		// 使用JavaMail发送邮件的5个步骤
		// 1、创建session
		Session session = Session.getInstance(prop);
		// 开启Session的debug模式，这样就可以查看到程序发送Email的运行状态
		session.setDebug(false);
		// 2、通过session得到transport对象
		Transport ts = session.getTransport();
		// 3、使用邮箱的用户名和密码连上邮件服务器，发送邮件时，发件人需要提交邮箱的用户名和密码给smtp服务器，用户名和密码都通过验证之后才能够正常发送邮件给收件人。
		ts.connect(Constant.PW_RETRIEVE_SEND_SMTP,
				Constant.PW_RETRIEVE_SEND_EMIAL, Constant.PW_RETRIEVE_PW);
		// 4、创建邮件
		Message message = createSimpleMail(session, recipient, username,
				retriveTime);
		// 5、发送邮件
		ts.sendMessage(message, message.getAllRecipients());
		ts.close();
	}

	/**
	 * @Method: createSimpleMail
	 * @Description: 创建一封只包含文本的邮件
	 * 
	 * @param session
	 * @return
	 * @throws Exception
	 */
	public static MimeMessage createSimpleMail(Session session,
			String recipient, String uesrname, String code) throws Exception
	{
		// 创建邮件对象
		MimeMessage message = new MimeMessage(session);
		// 指明邮件的发件人
		message.setFrom(new InternetAddress(Constant.PW_RETRIEVE_SEND_EMIAL));
		// 指明邮件的收件人
		message.setRecipient(Message.RecipientType.TO, new InternetAddress(
				recipient));
		// 邮件的标题
		message.setSubject("roboy后台管理密码找回邮件");
		// 邮件的文本内容
		message.setContent(getEmailContent(uesrname, code),
				"text/html;charset=UTF-8");
		// 返回创建好的邮件对象
		return message;
	}

	public static String getEmailContent(String username, String code)
			throws UnknownHostException
	{
		StringBuffer sf = new StringBuffer();
		sf.append("您好，点击下面链接将为roboy后台管理账号 \"");
		sf.append(username);
		sf.append("\" 设置新的密码，如果非本人操作，请忽略：<br>");
		sf.append("<a href=\"");
		sf.append(Constant.ABSOLUTE_URL + "login/pwretrieve");
		sf.append("?user=" + username);
		sf.append("&id=" + code);
		sf.append("\">");
		sf.append(" <FONT   face=\"MS   UI   Gothic\"   size=\"3\"><b>设置新密码请点击这里</b></FONT>");
		sf.append("</a>");
		sf.append("（该链接半小时后失效）");

		return sf.toString();
	}

	public static boolean isEmailFormat(String email)
	{
		boolean tag = true;
		final String pattern1 = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
		final Pattern pattern = Pattern.compile(pattern1);
		final Matcher mat = pattern.matcher(email);
		if (!mat.find())
		{
			tag = false;
		}
		return tag;
	}
}